package reflect;

import reflect.annotations.AutoRunClass;
import reflect.annotations.AutoRunMethod;

import java.lang.reflect.Method;

/*
首先启动程序后，输入一个类名，例如：reflect.Person
1.如果该类被注解@AutoRunClass标注了，则继续下面操作，
        否则直接提示：该类没有被@AutoRunClass注解，程序结束。
2.如果类被注解@AutoRunClass标注，则：
        调用该类中所有被 @AutoRunMethod 标注的方法，
        方法的调用顺序为：方法名称的字母顺序。
        前提：方法标注时，仅标注那些无参方法
 */
public class Test2 {
    public static void main(String[] args) throws Exception{

        System.out.println("请输入一个类名：");
        String className = new java.util.Scanner(System.in).next();
        Class cla = Class.forName(className);
        if(cla.isAnnotationPresent(AutoRunClass.class)){
            Object obj = cla.newInstance();
            Method[] methods = cla.getDeclaredMethods();
            for(Method m : methods){
                if(m.isAnnotationPresent(AutoRunMethod.class)){
                    m.invoke(obj);
                    System.out.println("调用了："+m.getName());
               }else {
                    System.out.println("该类没有被@AutoRunMethod注解，程序结束。");
                }
            }
        }else {
            System.out.println("该类没有被@AutoRunClass注解，程序结束。");
        }
    }
}
